/**
 * 用于数据表格混入
 */
let TableMixin = {
    data() {
        return {
            // 表格所有列名称数据列表
            columnList: [],
            // 显示/隐藏列的选中下标数据集合
            visibleList: [],
            // 隔行变色
            stripe: false,
            // 查询折叠
            toggleSearchStatus: false,
            // 加载
            loading: false,
            // 侧边栏详情
            drawerVisible: false,
            // 多选
            selectionRows: [],

            // 查询条件
            queryParams: {
                total: 0,
                page: 1,
                limit: 10,
                keyword: null,
                order: null,
                asc: null
            },
        }
    },

    mounted() {
        this.$nextTick(() => {
            this.getTableColumns()
        })
    },

    methods: {

        /**
         * 显示或隐藏列
         * 获取表格列
         */
        getTableColumns() {
            if (this.$refs.table) {
                this.$refs.table.$children.forEach((item, index) => {
                    if (item.type) {
                        const col = item.$options.propsData
                        this.columnList.push({
                            'index': index,
                            'name': col.prop,
                            'label': item.type == 'selection' ? '选择' : item.label,
                            'show': true
                        })
                    }
                })
            }
        },
        /**
         * 显示或隐藏列
         * 判断是显示或隐藏该列
         * @param {*} name
         */
        isHideColumn(name) {
            let column = this.columnList.filter(item => item.name === name)
            if (column && column.length > 0) {
                return column[0].show
            } else {
                return true
            }
        },
        /**
         * 显示或隐藏列
         * 全选或不选
         * @param {*} val
         */
        handleCheckAllChange(val) {
            if (val) {
                this.columnList.forEach(item => item.show = true)
            } else {
                this.columnList.forEach(item => item.show = false)
            }
        },

        /**
         * 区域全屏
         * @param {*} ref
         */
        handleFullscreen(ref) {
            const element = this.$refs[ref]
            if (!this.$Screenfull.isEnabled) {
                this.$message({
                    message: "you browser can not work",
                    type: "warning"
                });
                return false;
            }
            if (!this.$Screenfull.isFullscreen) {
                this.$Screenfull.request(element.$el);
            } else {
                this.$Screenfull.toggle();
            }
        },

        /**
         * 表格隔行变色
         */
        handleStripe() {
            this.stripe = !this.stripe
        },

        /**
         * 多选
         */
        handleSelection(selection) {
            this.selectionRows = selection
        },


        /**
         * 每页数
         */
        handleSizeChange(val) {
            this.queryParams.limit = val
            this.getDataList()
        },
        /**
         * 当前页
         */
        handleCurrentChange(val) {
            this.queryParams.page = val
            this.getDataList()
        },
        /**
         * 侧边栏抽屉关闭
         */
        handleCloseDrawerDetail(done) {
            done();
        },

        /**
         * 重置
         */
        handleResetPage() {
            this.queryParams.page = 1
            this.queryParams.total = null
        }
    }
}

export default TableMixin
